import { mongodbDataSource, mysqlDataSource } from '@/utils/database'
import { MongoRepository, ObjectLiteral, Repository } from 'typeorm'

// Mysql模型相关混入函数，把一些通用的处理放入其中，当前放入获取当前Model对应的数据库实例
export const EntityMixin = <T extends ObjectLiteral>(Base: new () => T) => {
  return class {
    // 当前模型的存储库
    private static repository: Repository<T>

    // 获取存储库实例,用于非mongoDB的存储库
    static getRepository() {
      if (!this.repository) {
        // mysql实例
        this.repository = mysqlDataSource.getRepository(Base)
      }
      return this.repository
    }
  }
}

// MongoDB模型相关混入函数，把一些通用的处理放入其中，当前放入获取当前Model对应的数据库实例
export const MongoEntityMixin = <T extends ObjectLiteral>(Base: new () => T) => {
  return class {
    // 当前模型的存储库
    private static repository: MongoRepository<T>

    // 获取存储库实例,用于非mongoDB的存储库
    static getRepository() {
      if (!this.repository) {
        // mysql实例
        this.repository = mongodbDataSource.getMongoRepository(Base)
      }
      return this.repository
    }
  }
}
